package fr.enssat.embeddedsoft.projet.fgourvel.spotrin.bluetooth;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.bluetooth.BluetoothSocket;
import android.util.Log;

/********************************************************************
 * ConnectedThread --> Thread de gestion de la communication :
 *                  
 *********************************************************************/

public class ConnectedThread extends Thread{

        private static String TAG = "ConnectedThread";
        private BluetoothService service;
        private BluetoothSocket socket;
        private InputStream fluxEntree;
        private OutputStream fluxSortie;
        
        public int recu = 1;
        public int envoie = 0;
        
        
        /*********************************************************
        /*                       CONSTRUCTEUR
         *********************************************************/
        
        
		public ConnectedThread(BluetoothService service, BluetoothSocket socket){
		        this.service = service;
		        this.socket = socket;
		       
		        try {
		        	 // Récupération des flux d'entrée/sortie sur socket
		                fluxEntree = socket.getInputStream();
		                fluxSortie = socket.getOutputStream();
		        } catch (IOException e) {
		                Log.e(TAG,"Bluetooth : echec recup flux input/output",e);
		        }
		}
        
        /*********************************************************
        /*                       TRAITEMENT
         *********************************************************/		
		
		public void run(){
		        byte[] buffer = new byte[1024];
		        int bytes;
		        
		        try {
		                // Lecture du flux d'entrée
		                bytes = fluxEntree.read(buffer); 
		                //récupération du message
		                service.getHandler().obtainMessage(recu,bytes,-1,buffer).sendToTarget();
		        } catch (IOException e) {
		                Log.e(TAG,"Bluetooth : erreur lecture flux I/O",e);
		                // gestion d'erreur : perte de connexion
		                service.connectionLost();
		                // on se remet en mode écoute
		                service.start();
		        }
		}
        
		/*********************************************************
		/*                       Ecriture distante
		 *********************************************************/
		
		public void write(byte[] buffer){
		        
		        try {
		        	    // Ecriture dans le flux de sortie
		                fluxSortie.write(buffer);                       
		                service.getHandler().obtainMessage(envoie,-1,-1,buffer).sendToTarget();
		        } catch (IOException e) {
		                Log.e(TAG,"Bluetooth : echec ecriture flux sortant",e);
		        }
		}
        
		/*********************************************************
		/*                       ARRET DU THREAD
		 *********************************************************/
		public void cancel(){
		        // On ferme la socket
		        try {
		                socket.close();
		        } catch (IOException e) {
		                Log.e(TAG,"Bluetooth : la fermeture de la socket a échoué",e);
		        }
		}
        
}
